/**
* @author Lourdes Sanchez
* @author Eugenia Jose
* @author Esteban Castro
* @author Carlos Fernandez
* @author Fernando Turon
* @version 1.0 01-05-12
*
* La clase GestorInscripcion se instancia en distintas parte de la aplicación
*
* @see ....
*/

package edu.uoc.tds.pec4.server.bbdd;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import java.rmi.RemoteException;

import edu.uoc.tds.pec4.common.RemotoInterface;
import edu.uoc.tds.pec4.exception.NoHayInscritosSuficientesException;
import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Estudiante;
import edu.uoc.tds.pec4.model.Inscripcion;
import edu.uoc.tds.pec4.model.Prueba;
import edu.uoc.tds.pec4.model.Ronda;
import edu.uoc.tds.pec4.model.Usuario;


/**
 *
 * @author Fernando
 */
public class GestorInscripcion {
    //Fernando
    //Atributo de clase para almacenar el remoto
    private RemotoInterface remoto;
    String schema;

    //Fernando
    public GestorInscripcion(RemotoInterface remoto) throws RemoteException{
        this.remoto = remoto;
        this.schema = this.remoto.getSchema();
    }

    //Fernando
    //Nos devuelve el numero de inscritos para un id de prueba
    public int getNumeroInscritos(int id_prueba) throws RemoteException{
        //Inicializamos las variables a utilizar
        int numero_inscritos = 0;
	String sqlString = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        //Establecemos la sentencia para obtener una lista de resultados
        sqlString = "SELECT "
                + "COUNT(id_usuario) AS numero_inscritos "
                + "FROM "
                + this.schema + "."
                + "inscripcion "
                + "WHERE "
                + "id_prueba = ?;";

	//Capturaremos la excepcion en caso de error
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, id_prueba);

            resultSet = preparedStatement.executeQuery();

            //Si la consulta devuelve un valor lo almacenaremos en la variable definida previamente
            if(resultSet.next()){
                numero_inscritos = resultSet.getInt("numero_inscritos");
            }

            //En otro caso lanzamos la excepcion
            else{
                throw new NoHayInscritosSuficientesException();
            }       
        }

        //Capturamos la excepcion personalizada y mostramos la pila
        catch (NoHayInscritosSuficientesException exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorNoHayInscritosSuficientes"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.errorNoHayInscritosSuficientes"));
        }

        //CApturamos la excepcion de SQL y mostramos la pila*/
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"));
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las conexiones abiertas
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null,  GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
            }
        }

        //devolvemo la lista de pruebas generada
        return numero_inscritos;
    }

    //Fernando
    //Verificmaos que hay inscritos suficientes de acuerdo a os parametros establecidos
    public boolean hayInscritosSuficientes(int numeroInscritos){
        boolean hayInscritosSuficientes = false;
        int numeroMinimoInscritosEnPrueba = 0;

        //Instanciamos la clase para acceder a los parametros
        GestorParametro gestorParametro = new GestorParametro();
        numeroMinimoInscritosEnPrueba = gestorParametro.getNumeroPersonasMinimasInscritas();

        //Si el numero de inscritos es inferior al minimo exigido
        if(numeroInscritos >= numeroMinimoInscritosEnPrueba){
            hayInscritosSuficientes = true;
        }

        //Devolvemos un booleano que indica si hay inscritos suficientes
        return hayInscritosSuficientes;
    }

    //Fernando
    //Metodo para realiza la inscripcion de usuarios en una ronda determinada
    public void realizarInscripcionUsuarios(Usuario usuario, Ronda ronda) throws RemoteException{
        //Inicializamos las variables a utilizar
	String sqlString = null;
        PreparedStatement preparedStatement = null;

	//Establecemos la sentencia para insetar una inscripcionronda
        sqlString = "INSERT INTO "
                + this.schema + "."
                + "InscripcionRonda "
                + "(id_usuario, "
                + "id_tipo_ronda, "
                + "id_prueba) "
                + "VALUES(?,?,?);";

	//**Capturaremos la excepcion en caso de error */
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, usuario.getId_usuario());
            preparedStatement.setInt(2, ronda.getId_tipo_ronda());
            preparedStatement.setInt(3, ronda.getId_prueba());
            
            preparedStatement.executeUpdate();
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"));
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las conexiones abiertas
            try {
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
            }
        }
    }

    //Fernando
    //Obtenemos una lista con los estudiantes inscritos en una prueba que se pasa por parametro
    public List<Usuario> getListaEstudiantesInscritosEnPrueba(Prueba prueba) throws RemoteException{
        List<Usuario> lista = new ArrayList<Usuario>();

        //**Establecemos la sentencia para obtener la lista con los usuarios inscritos a una prueba*/
	String sqlString = null;
	sqlString = "SELECT id_usuario, "
                + "id_prueba "
                + "FROM "
                + this.schema + "."
                + "Inscripcion "
                + "WHERE "
                + "id_prueba = ?;";

        //Inicializamos las variables
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, prueba.getId_prueba());
            resultSet = preparedStatement.executeQuery();

            //Recorremos el Recordset para ir añadiendo a la lista
            while(resultSet.next()){
                Usuario usuario = new Usuario();

                usuario.setId_usuario(resultSet.getInt("id_usuario"));
                lista.add(usuario);
            }
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"));
        }

        /** Capturamos excepcion de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
        }

        /** En todo caso ejecutamos el siguiente código*/
        finally {
            //Cerramos las conexiones abiertas
            try {
                resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepcion de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
            }
        }

        //Retornamos la lista construida
        return lista;
    }

    //Fernando
    //Metodo que devuelve una lista de estudiantes inscritos en una ronda pasado por parametro
    public List<Usuario> getListaEstudiantesInscritosEnRonda(Ronda ronda) throws RemoteException{
        List<Usuario> lista = new ArrayList<Usuario>();

        //**Establecemos la sentencia para obtener la lista con los usuarios inscritos a una prueba*/
	String sqlString = null;
	sqlString = "SELECT id_usuario "
                + "FROM "
                + this.schema + "."
                + "inscripcionronda "
                + "WHERE "
                + "id_prueba = ? "
                + "AND "
                + "id_tipo_ronda = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);

            preparedStatement.setInt(1, ronda.getId_prueba());
            preparedStatement.setInt(2, ronda.getId_tipo_ronda());
            resultSet = preparedStatement.executeQuery();

            //Recorremos el resultset para ir construyendo la lista
            while(resultSet.next()){
                Usuario usuario = new Usuario();

                usuario.setId_usuario(resultSet.getInt("id_usuario"));

                lista.add(usuario);
            }
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"));
        }

        /** Capturamos excepciÃ³n de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
        }

        /** En todo caso ejecutamos el siguiente código*/
        finally {
            //Cerramos las estructuras abiertas
            try {
                resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciÃ³n de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
            }
        }

        //Retornamos la lista generada
        return lista;
    }

    //Fernando
    //Metodo para obtener una cadena con la lista de respuetsas del estudiante en una ronda determinada
    public String getRespuestasEstudiantes(Ronda ronda, Usuario usuario) throws RemoteException{
        //Iniciamos la variable que se retornara
        String respuestasEstudiantes = "";

        //**Establecemos la sentencia para obtener la lista con los usuarios inscritos a una prueba*/
	String sqlString = null;
	sqlString = "SELECT respuestas_estudiantes AS respuestas "
                + "FROM "
                + this.schema + "."
                + "inscripcionronda "
                + "WHERE "
                + "id_prueba = ? "
                + "AND "
                + "id_tipo_ronda = ? "
                + "AND "
                + "id_usuario = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);

            preparedStatement.setInt(1, ronda.getId_prueba());
            preparedStatement.setInt(2, ronda.getId_tipo_ronda());
            preparedStatement.setInt(3, usuario.getId_usuario());
            resultSet = preparedStatement.executeQuery();

            if(resultSet.next())
                respuestasEstudiantes = resultSet.getString("respuestas");
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"));
        }

        /** Capturamos excepciÃ³n de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
        }

        /** En todo caso ejecutamos el siguiente código*/
        finally {
            //Cerramos las estructuras abiertas
            try {
                resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciÃ³n de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorinscripcion.error"));
            }
        }

        //etornamos la cadena generada
        return respuestasEstudiantes;
    }

    /// Esteban
    public boolean estaInscritoEnPrueba(Estudiante estudiante, Prueba prueba)
    {
        boolean estaInscrito = false;

        //**Establecemos la sentencia para obtener la lista con los usuarios inscritos a una prueba*/
	String sqlString = null;
	sqlString = "SELECT id_usuario "
                + "FROM "
                + this.schema + "."
                + "inscripcion "
                + "WHERE "
                + "id_prueba = ? "
                + "AND "
                + "fecha_baja is null "
                + "AND "
                + "id_usuario = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);

            preparedStatement.setInt(1, prueba.getId_prueba());
            preparedStatement.setInt(2, estudiante.getId_usuario());
            resultSet = preparedStatement.executeQuery();

            if(resultSet.next())
                estaInscrito = true;
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos excepciÃ³n de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** En todo caso ejecutamos el siguiente código*/
        finally {
            try {
                resultSet.close();
                preparedStatement.close();                
            }

            /** Capturamos excepciÃ³n de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            }
        }

        return estaInscrito;
    }

    ///Esteban
    public List<Inscripcion> getListaInscritosEnPrueba(Prueba prueba)
    {
        List<Inscripcion> lista = new ArrayList<Inscripcion>();

        //**Establecemos la sentencia para obtener la lista con los usuarios inscritos a una prueba*/
	String sqlString = null;
	sqlString = "SELECT id_usuario,id_prueba,fecha_inscripcion,fecha_modificacion,fecha_baja "
                +" FROM "+ this.schema + ".INSCRIPCION WHERE id_prueba = ? AND fecha_baja IS NULL;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, prueba.getId_prueba());
            resultSet = preparedStatement.executeQuery();

            while(resultSet.next())
            {
                Inscripcion inscripcion = new Inscripcion();

                inscripcion.setid_Prueba(resultSet.getInt("id_prueba"));
                inscripcion.setid_usuario(resultSet.getInt("id_usuario"));
                inscripcion.setFechaAlta(resultSet.getDate("fecha_inscripcion"));
                inscripcion.setFechaModificacion(resultSet.getDate("fecha_modificacion"));
                inscripcion.setFechaBaja(resultSet.getDate("fecha_baja"));
                
                lista.add(inscripcion);
            }
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos excepciÃ³n de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** En todo caso ejecutamos el siguiente código*/
        finally {
            try {
                resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciÃ³n de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            }
        }

        return lista;
    }

    ///Esteban
    //Metodo para realiza la baja de inscripcion del estudiante de una prueba
    public boolean realizarBajaInscripcionPrueba(Estudiante estudiante, Prueba prueba){
        //Inicializamos las variables a utilizar
	int filasAfectadas = -1;

        //boolean borrado = false;
        String sqlString = null;
        PreparedStatement preparedStatement = null;

	//Establecemos la sentencia para insetar una inscripcionronda
        sqlString = "DELETE FROM "+ this.schema + ".inscripcion "
                + "WHERE id_usuario = ? "
                + "AND id_prueba = ? ";

	//**Capturaremos la excepcion en caso de error */
        try{

            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, estudiante.getId_usuario());
            preparedStatement.setInt(2, prueba.getId_prueba());

            filasAfectadas = preparedStatement.executeUpdate();
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las conexiones abiertas
            try {
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            }
        }

        return (filasAfectadas > 0);
    }

    ///Esteban
    //Metodo para realiza la alta de inscripcion del estudiante en una prueba
    public boolean realizarAltaInscripcionPrueba(Estudiante estudiante, Prueba prueba){
        //Inicializamos las variables a utilizar
	int filasAfectadas = -1;
        String sqlString = null;
        PreparedStatement preparedStatement = null;

	//Establecemos la sentencia para insetar una inscripcionronda
        sqlString = "INSERT INTO "+ this.schema + ".inscripcion "
                + "(id_usuario,id_prueba,fecha_inscripcion,fecha_modificacion) "
                + "VALUES (?,?,?,?);";

	//**Capturaremos la excepcion en caso de error */
        try{

            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);            
            preparedStatement.setInt(1, estudiante.getId_usuario());
            preparedStatement.setInt(2, prueba.getId_prueba());
            preparedStatement.setDate(3, new java.sql.Date(new Date().getTime()));
            preparedStatement.setDate(4, new java.sql.Date(new Date().getTime()));

            filasAfectadas = preparedStatement.executeUpdate();
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.errorBBDD"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las conexiones abiertas
            try {
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorinscripcion.error"), GestorIdiomas.getMessage("gestorinscripcion.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            }
        }

        return (filasAfectadas > 0);
    }
}
